<template>
  <!---------- 表格数据区域 ----------->
  <TableTreeTemplate ref="tableRef" :columns="columns" />

</template>
<script setup lang="ts">
  import { ref, onMounted } from 'vue';
  import TableTreeTemplate from '@/components/template/table/table-tree-template.vue';//表格树模版
  import { bizApi } from '@/api/biz';
  import { message, Modal } from 'ant-design-vue';
  import { type CustomTableColumnType } from '@/types/table';//扩展 TableColumnType 定义

  /* [生成接口] */
  const onGenerateApi = async (id: number) => {
    Modal.confirm({// 先显示确认弹窗
      title: '确认生成实体',
      content: '确定要生成该表的实体类吗？此操作将根据表结构生成对应的实体代码。',
      okText: '确认',
      cancelText: '取消',
      onOk: async () => { // 用户点击确认按钮时执行
        const action = 'base.manage.tableconfig.ServiceImpl.generateClass';
        const params = { table_config_id: id };
        try {
          const result = await bizApi.httpSave(action, params);
          message.success({ content: result?.sub_message || '接口类生成成功',});
          getTableData(); // 重新获取表格数据
        } catch (error: any) {
          message.error(error?.message || '接口类生成失败');
        }
      },
      onCancel: () => { message.info('已取消生成操作');} // 用户点击取消按钮时执行
    });
  };

  /* [获取表格数据] 1.调用 table-template 组件的 getTableData 方法 获取数据 2.处理数据 3.赋值 */
  const getTableData = async () => { 
    await tableRef.value?.getTableData(listAction, listParams, true);
  }; 
  const tableRef = ref<typeof TableTreeTemplate | null>(null);
  const listAction = 'base.manage.tableconfig.ServiceImpl.list';//list接口 方法
  const listParams = { module_type: 2, module_level_type: 3 } //list接口 参数 2:取得总后台模块,3:取得所有级别模块

  onMounted(() => { getTableData(); }); //组件加载完成时，获取表格数据
  
  /* [表格配置] */
  const columns: CustomTableColumnType<any>[] = [ 
    {
      title: '表名',
      fixed: 'left',
      dataIndex: 'table_name',
      width: 180,
    },
    {
      title: '显示名',
      dataIndex: 'table_display_name',
      width: 180,
    },
    {
      title: '实体类最后更新时间',
      dataIndex: 'table_last_date',
      width: 150,
    },
    {
      title: '是否显示',
      dataIndex: 'table_is_display',
      options: {1: '显示', 2: '不显示'} //扩展 TableColumnType 字段，用于枚举类型映射文本值
    },
    {
      title: '排序',
      dataIndex: 'sort',
      width: 30,
    },
    {
      title: '备注',
      dataIndex: 'table_memo',
      width: 250,
    },
    {
      title: '操作',
      dataIndex: 'action',
      buttons: [
        {
          children: () => '生成接口代码',
          type: 'link',
          onClick: (record) => onGenerateApi(record.table_config_id),
        },
      ]
    }
  ]


</script>
<style lang="less" scoped>
</style>
